package com.cskaoyan.javse.oop2._0encapsulate._0introduction;

/**
 * 封装思想:
 * 封装（encapsulate）是指将数据及相关操作绑定在一起的一种编程机制，使其构成一个不可分割的独立实体。在Java中，类就是这样一种结构。当然，数据被保护在类的内部，是为了尽可能地隐藏内部的细节，只保留一些对外"接口"使之与外部发生联系。
 *
 * 之所以要封装，是为了将代码的使用者和实现者分开。使用者能够完全得到自己想要的功能，又不需要思考过多细节；实现者可以隐藏功能实现的细节，方便灵活进行修改而不影响使用者使用。
 *
 * 从具体的语法上来说,封装依赖于访问权限修饰符来实现.不需要给外界看的,用private修饰,给外界看的,用public修饰
 *
 * 私有化成员变量后,外界就完全无法访问了,如果我想要给外界有限,受控制的访问,就需要使用方法来提供访问或者赋值,也就是所谓的Getter/Setter方法
 *
 * Getter/Setter方法有啥用?
 *      1.可以控制变量的访问或者赋值
 *      总之，Getter/Setter方法使成员变量的读、写分离了，从原先的不可控变成了可控。在实际开发中，一个类的多数成员变量都是私有的，有必要时提供方法访问，无必要的则无需提供。
 *
 *   约定：实际开发中，成员变量都多数是private修饰。但是课堂上就不这么做了，因为比较麻烦。
 *
 * @since 11:39
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        /*Student s = new Student();
        // System.out.println(s.age);
        System.out.println(s.getAge());
        s.setAge(18);
        System.out.println(s.getAge());*/

        Student s = new Student();
        s.setAge(100);
        System.out.println(s.getAge());

    }
}

class Student {
    // 私有化成员变量,这样的话外界就无法访问了
    private int age;

    // Getter方法,访问,标准格式如下
    public int getAge() {
        return age;
    }

    // Setter方法,赋值,标准格式如下
    public void setAge(int age) {
        // 可以给变量的赋值做判断
        if (age < 1 || age > 130) {
            System.out.println("参数有误!");
            return;
        }
        this.age = age;
    }

    public Student() {
    }

    /*public Student(int age) {
        this.age = age;
    }*/
}
